home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet multimedia / Muzyka / Edytory sampli (probek dzwieku) / ZynAddSubFX_2.2.0 / Setup_ZynAddSubFX-2.2.0.exe / source code / Seq / Sequencer.h < prev   
C/C++ Source or Header  |  2005-03-14  |  2KB  |  85 lines

  1. /*
  2.   ZynAddSubFX - a software synthesizer
  3.  
  4.   Sequencer.h - The Sequencer
  5.   Copyright (C) 2003-2005 Nasca Octavian Paul
  6.   Author: Nasca Octavian Paul
  7.  
  8.   This program is free software; you can redistribute it and/or modify
  9.   it under the terms of version 2 of the GNU General Public License 
  10.   as published by the Free Software Foundation.
  11.  
  12.   This program is distributed in the hope that it will be useful,
  13.   but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15.   GNU General Public License (version 2) for more details.
  16.  
  17.   You should have received a copy of the GNU General Public License (version 2)
  18.   along with this program; if not, write to the Free Software Foundation,
  19.   Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
  20. */
  21.  
  22. #ifndef SEQUENCER_H
  23. #define SEQUENCER_H
  24.  
  25. #include "../globals.h"
  26. #include "MIDIEvents.h"
  27. #include "MIDIFile.h"
  28.  
  29. class Sequencer:public MIDIEvents{
  30.     public:
  31.     Sequencer();
  32.     ~Sequencer();
  33.     
  34.     //theese functions are called by the master and are ignored if the recorder/player are stopped
  35.     void recordnote(char chan, char note, char vel);
  36.     void recordcontroller(char chan,unsigned int type,int par);
  37.     
  38.     //this is only for player
  39.     //it returns 1 if this must be called at least once more
  40.     //it returns 0 if there are no more notes for the current time
  41.     //or -1 if there is no note
  42.     int getevent(char ntrack, int *midich,int *type,int *par1, int *par2);
  43.  
  44.     //returns 0 if ok or -1 if there is a error loading file
  45.     int importmidifile(char *filename);    
  46.     
  47.     void startplay();
  48.     void stopplay();
  49.     
  50.  
  51.     int play;    
  52.     int playspeed;//viteza de rulare (0.1x-10x), 0=1.0x, 128=10x
  53.     void setplayspeed(int speed);
  54.     
  55.     private:
  56.     
  57.     MIDIFile midifile;
  58.  
  59.     /* Timer */
  60.     struct timestruct{
  61.     double abs;//the time from the begining of the track
  62.     double rel;//the time difference between the last and the current event
  63.     double last;//the time of the last event (absolute, since 1 Jan 1970)
  64.     //theese must be double, because the float's precision is too low
  65.     //and all theese represents the time in seconds
  66.     } playtime[NUM_MIDI_TRACKS];
  67.     
  68.     void resettime(timestruct *t);
  69.     void updatecounter(timestruct *t);//this updates the timer values
  70.  
  71.     /* Player only*/
  72.  
  73.     struct {
  74.     event ev;
  75.     double time;
  76.     } nextevent[NUM_MIDI_TRACKS];    
  77.     
  78.     double realplayspeed;
  79.     
  80. };
  81.  
  82.  
  83. #endif
  84.  
  85.